#include <iostream>

/* 饿汉单例模式 以空间换时间 */
// class Singleton{
// public:
//     static Singleton& getInstance() { return _eton; }
//     int getData() { return _data; }
// private:
//     Singleton(int data = 99) : _data(data){}
//     ~Singleton(){};
//     Singleton(const Singleton&) = delete;
//     Singleton& operator=(const Singleton&) = delete;
    
// private:
//     static Singleton _eton;
//     int _data;
// };
// Singleton Singleton::_eton;

/* 懒汉单例模式 懒加载 -- 延时加载思想 -- 一个对象用的时候再实例化 */
// 这里介绍<Effective C++> 作者提出的一种更加优雅简便的单例模式 Meyers Singleton int C++

class Singleton{
public:
    static Singleton& getInstance() {
        static Singleton _eton;
        return _eton;
    }
    int getData() { return _data; }
private:
    Singleton(int data = 99) : _data(data){}
    ~Singleton() {};
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    int _data;
};

int main() {
    std::cout << Singleton::getInstance().getData() << std::endl;
    return 0;
}


